package com.sudo.service.admin.service;

import com.sudo.common.utils.PagedGridResult;
import com.sudo.dao.admin.entity.SysRole;
import com.sudo.dao.admin.entity.SysRoleMenu;
import com.sudo.dao.admin.model.bo.SysRoleBO;

import java.util.List;
import java.util.Set;

/**
 * @author 为道日损 2020-04-25 18:33
 */
public interface SysRoleService {

    /**
     * 分页查询角色
     *
     * @param page     当前页
     * @param pageSize 每页的数量
     * @return list
     */
    PagedGridResult querySysRoleByPage(Integer page, Integer pageSize, String roleCodeOrName);

    /**
     * 通过roleCode查找角色
     * @param roleCode 角色代码
     * @return SysRole
     */
    SysRole getSysRoleByRoleCode(String roleCode);

    /**
     * 通过角色代码修改角色
     * @param sysRoleBO 角色代码
     * @return boolean
     */
    int updateSysRoleByCode(String sessionUser , SysRoleBO sysRoleBO);

    /**
     * 获取所有角色
     * @return list
     */
    List<SysRole> getAllSysRoleCodeAndNameWithoutSuperByStatus(String status);

    /**
     * 获取角色的简单信息
     * @return page
     */
    PagedGridResult getSimpleRoleByPage(Integer page, Integer pageSize,String status);

    int addSysRole(SysRoleBO sysRoleBO,String sessionUser);

    boolean hasRoleCode(String roleCode);

    List<SysRoleMenu> getMyMenuCodeByRoleCode(String roleCode);

    int offRoleMenuAuth(String roleCode, String menuCode);

    int onRoleMenuAuth(String roleCode, String menuCode);

    int offRoleButtonAuth(String roleCode, String menuCode ,String buttonCode);

    int onRoleButtonAuth(String roleCode, String menuCode, String buttonCode);

    SysRole getRoleByUsername(String username);

    String getRoleCodeByUsername(String username);

    Set<String> getRolePermissionFromRedis(String username, String menuCode);

    Set<String> getMenuPermissionFromRedis(String menuCode);

    int getUserCountByRoleCode(String roleCode);

    int deleteSysRoleByRoleCode(String roleCode);

    List<SysRole> getAllSysRoleWithoutSuper();
}
